package com.example.design.demo.single;

/**
 * 懒汉式
 *  1.声明实例,但是不初始化
 *  2.在构造方法私有化
 *  3.在调取getInstance进行对象返回的时候,判断对象是否为null,是否初始化完成
 *      3.1 初始化完成,既不为null,那就返回对象,否则进行对象的初始化
 *  缺点:  在多线程的访问中是有问题的 ---不安全
 *
 *  修改 01: 在方法上加锁   加锁的同时,会影响程序的效率
 */
public class SingletonLazy02 {

    private static SingletonLazy02 instance=null;

    private SingletonLazy02(){};

    public static synchronized SingletonLazy02 getInstance(){
        if(instance==null){
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
            instance=new SingletonLazy02();
        }
        return instance;

    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()-> {
                System.out.println(SingletonLazy02.getInstance().hashCode());
            }).start();
        }
    }
}

